package com.cast.health.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cast.health.entity.PageResult;
import com.cast.health.entity.QueryPageBean;
import com.cast.health.entity.Result;
import com.cast.health.pojo.CheckItem;
import com.cast.health.service.CheckItemService;
import com.cast.health.uitls.MessageConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/checkitem")
public class CheckItemController {

    @Autowired
    private CheckItemService service;


    /**
     * 添加检查项
     *
     * @param checkItem
     * @return
     */
    @PostMapping("/add.do")
    public Result add(@RequestBody CheckItem checkItem) {
        //1.接收并校验参数
        if (checkItem == null) {
            return new Result(false, "参数异常!");
        }
        //2.通过code属性查找对应的对象,存在则返回信息,不存在可以添加
        LambdaQueryWrapper<CheckItem> wapper = new LambdaQueryWrapper<>();
        wapper.eq(CheckItem::getCode, checkItem.getCode());
        CheckItem one = service.getOne(wapper);
        //2.1判断是否存在
        if (one != null) {//存在该检查项
            return new Result(false, MessageConstant.ADD_CHECKITEM_FAIL);
        }
        //3.调用检查项service方法进行添加操作
        boolean save = service.save(checkItem);
        if (save == false) {
            //添加失败
            return new Result(true, MessageConstant.ADD_CHECKITEM_FAIL);
        }
        return new Result(true, MessageConstant.ADD_CHECKITEM_SUCCESS);
    }

    /**
     * 分页,条件查询
     * 条件:name,code
     *
     * @param queryPageBean
     * @return
     */
    @PostMapping("/findPage.do") //checkitem/findPage.do
    public PageResult findByPage(@RequestBody QueryPageBean queryPageBean) {
        //检查参数
        if (queryPageBean.getCurrentPage() <= 0 || queryPageBean.getPageSize() <= 0) {
            return null; //参数非法
        }
        //创建一个条件查询对象
        LambdaQueryWrapper<CheckItem> wrapper = new LambdaQueryWrapper<>();
        //当条件有名字或者code的时候
        if (queryPageBean.getQueryString() != null && queryPageBean.getQueryString() != "") {
            wrapper.like(CheckItem::getCode, queryPageBean.getQueryString()).
                    or().like(CheckItem::getName, queryPageBean.getQueryString());
        }

        //根据code码排序
        wrapper.orderByAsc(CheckItem::getCode);

        //分页条件拦截器对象:传入需要分页的参数
        IPage<CheckItem> pageInfo = new Page<>(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        //得到两个条件查询对象
        IPage<CheckItem> page = service.page(pageInfo, wrapper);
        //判断是否查询到
        if (page.getSize() == 0) {
            return null;  //在该条件下无数据
        }
        //返回总条数和每页数
        return new PageResult(page.getTotal(), page.getRecords());
    }

    /**
     * 查询所有数据
     *
     * @return
     */
    @GetMapping("/findAll.do")
    public Result findAll() {
        //调用service查询所有封装
        List<CheckItem> list = service.list();
        //判断一下该集合是否有数据
        if (list.size() == 0) {
            return new Result(false, MessageConstant.QUERY_CHECKITEM_FAIL, list); //没查到数据
        }
        //返回所有对象
        return new Result(true, MessageConstant.QUERY_CHECKITEM_SUCCESS, list);
    }


    /**
     * 根据删除一项数据:
     * 想要删除一条检查项,需要先删除他在检查组当中的位置
     *
     * @param id
     * @return
     */
    @GetMapping("/delete.do")
    public Result delete(Integer id) {
        //1.检查参数合格
        if (id == 0) {
            return null;
        }
        //2.判断该用户是否存在
        CheckItem byId1 = service.getById(id);
        if (byId1 == null) {
            return new Result(false, "该对象不存在!");
        }
        //3.创建一个根据id删除的方法
        boolean middle = service.deleteCheckItem(id);
        //判断是否删掉
        //判断是否删除成功
        if (middle == false) {
            return new Result(false, MessageConstant.DELETE_CHECKITEM_FAIL);
        }
        return new Result(true, MessageConstant.DELETE_CHECKITEM_SUCCESS);
    }


    /**
     * 根据一个id值查询一个对象
     * 回显操作
     *
     * @param id
     * @return
     */
    @GetMapping("/findById.do")
    public Result findById(Integer id) {
        //检查参数
        if (id == 0) {
            return null;  //参数异常
        }
        //根据id查询对象并返回
        CheckItem byId = service.getById(id);
        //判断是否存在
        if (byId == null) {
            return new Result(false, MessageConstant.QUERY_CHECKITEM_FAIL, null);
        }
        //成功返回对象数据
        return new Result(true, MessageConstant.QUERY_CHECKITEM_SUCCESS, byId);
    }

    /**
     * 按照id修改数据对象
     *
     * @param checkItem
     * @return
     */
    @PostMapping("/edit.do")
    public Result edit(@RequestBody CheckItem checkItem) {
        //检查传入的参数
        if (checkItem == null) {
            return new Result(false, "参数异常!", null);//参数异常
        }
        //根据id查询该对象
        CheckItem byId = service.getById(checkItem.getId());
        //判断是否存在该对象
        if (byId == null) {
            return null; //查询该id对象不存在
        }
        //调用service方法,修改数据
        boolean cTtem = service.updateById(checkItem);
        //判断是否修改成功
        if (cTtem == false) {
            return new Result(false, MessageConstant.EDIT_CHECKITEM_FAIL, null);
        }
        //修改成功
        return new Result(true, MessageConstant.EDIT_CHECKITEM_SUCCESS, cTtem);
    }
}
